home *** CD-ROM | disk | FTP | other *** search
/ Erotic Games: Memory / Erotic Games: Memory.iso / mac / air_installers / AdobeAIR.exe / setup.swf / scripts / mx / controls / Label.as < prev    next >
Text File  |  2009-02-12  |  14KB  |  491 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.geom.Rectangle;
  6.    import flash.text.StyleSheet;
  7.    import flash.text.TextLineMetrics;
  8.    import mx.controls.listClasses.BaseListData;
  9.    import mx.controls.listClasses.IDropInListItemRenderer;
  10.    import mx.controls.listClasses.IListItemRenderer;
  11.    import mx.core.FlexVersion;
  12.    import mx.core.IDataRenderer;
  13.    import mx.core.IFlexModuleFactory;
  14.    import mx.core.IFontContextComponent;
  15.    import mx.core.IUITextField;
  16.    import mx.core.UIComponent;
  17.    import mx.core.UITextField;
  18.    import mx.core.mx_internal;
  19.    import mx.events.FlexEvent;
  20.    
  21.    use namespace mx_internal;
  22.    
  23.    public class Label extends UIComponent implements IDataRenderer, IDropInListItemRenderer, IListItemRenderer, IFontContextComponent
  24.    {
  25.       
  26.       mx_internal static const VERSION:String = "3.0.0.0";
  27.        
  28.       
  29.       private var _selectable:Boolean = false;
  30.       
  31.       private var _text:String = "";
  32.       
  33.       private var _data:Object;
  34.       
  35.       mx_internal var htmlTextChanged:Boolean = false;
  36.       
  37.       private var _tabIndex:int = -1;
  38.       
  39.       private var _textWidth:Number;
  40.       
  41.       private var explicitHTMLText:String = null;
  42.       
  43.       private var enabledChanged:Boolean = false;
  44.       
  45.       private var condenseWhiteChanged:Boolean = false;
  46.       
  47.       private var _listData:BaseListData;
  48.       
  49.       private var _textHeight:Number;
  50.       
  51.       protected var textField:IUITextField;
  52.       
  53.       private var _htmlText:String = "";
  54.       
  55.       private var _condenseWhite:Boolean = false;
  56.       
  57.       mx_internal var textChanged:Boolean = false;
  58.       
  59.       public var truncateToFit:Boolean = true;
  60.       
  61.       private var textSet:Boolean;
  62.       
  63.       private var selectableChanged:Boolean;
  64.       
  65.       private var toolTipSet:Boolean = false;
  66.       
  67.       public function Label()
  68.       {
  69.          super();
  70.          tabChildren = true;
  71.       }
  72.       
  73.       override public function set enabled(param1:Boolean) : void
  74.       {
  75.          if(param1 == enabled)
  76.          {
  77.             return;
  78.          }
  79.          super.enabled = param1;
  80.          enabledChanged = true;
  81.          invalidateProperties();
  82.       }
  83.       
  84.       private function textField_textFieldStyleChangeHandler(param1:Event) : void
  85.       {
  86.          textFieldChanged(true);
  87.       }
  88.       
  89.       override public function get baselinePosition() : Number
  90.       {
  91.          var _loc1_:String = null;
  92.          var _loc2_:TextLineMetrics = null;
  93.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  94.          {
  95.             if(!textField)
  96.             {
  97.                return NaN;
  98.             }
  99.             validateNow();
  100.             _loc1_ = !!isHTML ? explicitHTMLText : text;
  101.             if(_loc1_ == "")
  102.             {
  103.                _loc1_ = " ";
  104.             }
  105.             _loc2_ = !!isHTML ? measureHTMLText(_loc1_) : measureText(_loc1_);
  106.             return textField.y + _loc2_.ascent;
  107.          }
  108.          if(!validateBaselinePosition())
  109.          {
  110.             return NaN;
  111.          }
  112.          return textField.y + textField.baselinePosition;
  113.       }
  114.       
  115.       public function set condenseWhite(param1:Boolean) : void
  116.       {
  117.          if(param1 == _condenseWhite)
  118.          {
  119.             return;
  120.          }
  121.          _condenseWhite = param1;
  122.          condenseWhiteChanged = true;
  123.          if(isHTML)
  124.          {
  125.             htmlTextChanged = true;
  126.          }
  127.          invalidateProperties();
  128.          invalidateSize();
  129.          invalidateDisplayList();
  130.          dispatchEvent(new Event("condenseWhiteChanged"));
  131.       }
  132.       
  133.       public function get textWidth() : Number
  134.       {
  135.          return _textWidth;
  136.       }
  137.       
  138.       override protected function createChildren() : void
  139.       {
  140.          super.createChildren();
  141.          if(!textField)
  142.          {
  143.             createTextField(-1);
  144.          }
  145.       }
  146.       
  147.       mx_internal function getTextField() : IUITextField
  148.       {
  149.          return textField;
  150.       }
  151.       
  152.       private function measureTextFieldBounds(param1:String) : Rectangle
  153.       {
  154.          var _loc2_:TextLineMetrics = !!isHTML ? measureHTMLText(param1) : measureText(param1);
  155.          return new Rectangle(0,0,_loc2_.width + UITextField.TEXT_WIDTH_PADDING,_loc2_.height + UITextField.TEXT_HEIGHT_PADDING);
  156.       }
  157.       
  158.       mx_internal function getMinimumText(param1:String) : String
  159.       {
  160.          if(!param1 || param1.length < 2)
  161.          {
  162.             param1 = "Wj";
  163.          }
  164.          return param1;
  165.       }
  166.       
  167.       private function textFieldChanged(param1:Boolean) : void
  168.       {
  169.          var _loc2_:* = false;
  170.          var _loc3_:* = false;
  171.          if(!param1)
  172.          {
  173.             _loc2_ = _text != textField.text;
  174.             _text = textField.text;
  175.          }
  176.          _loc3_ = _htmlText != textField.htmlText;
  177.          _htmlText = textField.htmlText;
  178.          if(_loc2_)
  179.          {
  180.             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  181.          }
  182.          if(_loc3_)
  183.          {
  184.             dispatchEvent(new Event("htmlTextChanged"));
  185.          }
  186.          _textWidth = textField.textWidth;
  187.          _textHeight = textField.textHeight;
  188.       }
  189.       
  190.       [Bindable("dataChange")]
  191.       public function get data() : Object
  192.       {
  193.          return _data;
  194.       }
  195.       
  196.       [Bindable("valueCommit")]
  197.       public function get text() : String
  198.       {
  199.          return _text;
  200.       }
  201.       
  202.       mx_internal function removeTextField() : void
  203.       {
  204.          if(textField)
  205.          {
  206.             textField.removeEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  207.             textField.removeEventListener("textInsert",textField_textModifiedHandler);
  208.             textField.removeEventListener("textReplace",textField_textModifiedHandler);
  209.             removeChild(DisplayObject(textField));
  210.             textField = null;
  211.          }
  212.       }
  213.       
  214.       public function get textHeight() : Number
  215.       {
  216.          return _textHeight;
  217.       }
  218.       
  219.       mx_internal function get styleSheet() : StyleSheet
  220.       {
  221.          return textField.styleSheet;
  222.       }
  223.       
  224.       public function set selectable(param1:Boolean) : void
  225.       {
  226.          if(param1 == selectable)
  227.          {
  228.             return;
  229.          }
  230.          _selectable = param1;
  231.          selectableChanged = true;
  232.          invalidateProperties();
  233.       }
  234.       
  235.       override public function get tabIndex() : int
  236.       {
  237.          return _tabIndex;
  238.       }
  239.       
  240.       public function set fontContext(param1:IFlexModuleFactory) : void
  241.       {
  242.          this.moduleFactory = param1;
  243.       }
  244.       
  245.       override public function set toolTip(param1:String) : void
  246.       {
  247.          super.toolTip = param1;
  248.          toolTipSet = param1 != null;
  249.       }
  250.       
  251.       mx_internal function createTextField(param1:int) : void
  252.       {
  253.          if(!textField)
  254.          {
  255.             textField = IUITextField(createInFontContext(UITextField));
  256.             textField.enabled = enabled;
  257.             textField.ignorePadding = true;
  258.             textField.selectable = selectable;
  259.             textField.styleName = this;
  260.             textField.addEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  261.             textField.addEventListener("textInsert",textField_textModifiedHandler);
  262.             textField.addEventListener("textReplace",textField_textModifiedHandler);
  263.             if(param1 == -1)
  264.             {
  265.                addChild(DisplayObject(textField));
  266.             }
  267.             else
  268.             {
  269.                addChildAt(DisplayObject(textField),param1);
  270.             }
  271.          }
  272.       }
  273.       
  274.       override protected function commitProperties() : void
  275.       {
  276.          super.commitProperties();
  277.          if(hasFontContextChanged() && textField != null)
  278.          {
  279.             removeTextField();
  280.             condenseWhiteChanged = true;
  281.             enabledChanged = true;
  282.             selectableChanged = true;
  283.             textChanged = true;
  284.          }
  285.          if(!textField)
  286.          {
  287.             createTextField(-1);
  288.          }
  289.          if(condenseWhiteChanged)
  290.          {
  291.             textField.condenseWhite = _condenseWhite;
  292.             condenseWhiteChanged = false;
  293.          }
  294.          textField.tabIndex = tabIndex;
  295.          if(enabledChanged)
  296.          {
  297.             textField.enabled = enabled;
  298.             enabledChanged = false;
  299.          }
  300.          if(selectableChanged)
  301.          {
  302.             textField.selectable = _selectable;
  303.             selectableChanged = false;
  304.          }
  305.          if(mx_internal::textChanged || mx_internal::htmlTextChanged)
  306.          {
  307.             if(isHTML)
  308.             {
  309.                textField.htmlText = explicitHTMLText;
  310.             }
  311.             else
  312.             {
  313.                textField.text = _text;
  314.             }
  315.             textFieldChanged(false);
  316.             textChanged = false;
  317.             htmlTextChanged = false;
  318.          }
  319.       }
  320.       
  321.       [Bindable("condenseWhiteChanged")]
  322.       public function get condenseWhite() : Boolean
  323.       {
  324.          return _condenseWhite;
  325.       }
  326.       
  327.       public function set listData(param1:BaseListData) : void
  328.       {
  329.          _listData = param1;
  330.       }
  331.       
  332.       private function get isHTML() : Boolean
  333.       {
  334.          return explicitHTMLText != null;
  335.       }
  336.       
  337.       public function get selectable() : Boolean
  338.       {
  339.          return _selectable;
  340.       }
  341.       
  342.       public function set text(param1:String) : void
  343.       {
  344.          textSet = true;
  345.          if(!param1)
  346.          {
  347.             param1 = "";
  348.          }
  349.          if(!isHTML && param1 == _text)
  350.          {
  351.             return;
  352.          }
  353.          _text = param1;
  354.          textChanged = true;
  355.          _htmlText = null;
  356.          explicitHTMLText = null;
  357.          invalidateProperties();
  358.          invalidateSize();
  359.          invalidateDisplayList();
  360.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  361.       }
  362.       
  363.       public function set data(param1:Object) : void
  364.       {
  365.          var _loc2_:* = undefined;
  366.          _data = param1;
  367.          if(_listData)
  368.          {
  369.             _loc2_ = _listData.label;
  370.          }
  371.          else if(_data != null)
  372.          {
  373.             if(_data is String)
  374.             {
  375.                _loc2_ = String(_data);
  376.             }
  377.             else
  378.             {
  379.                _loc2_ = _data.toString();
  380.             }
  381.          }
  382.          if(_loc2_ !== undefined && !textSet)
  383.          {
  384.             text = _loc2_;
  385.             textSet = false;
  386.          }
  387.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  388.       }
  389.       
  390.       override protected function measure() : void
  391.       {
  392.          super.measure();
  393.          var _loc1_:String = !!isHTML ? explicitHTMLText : text;
  394.          _loc1_ = getMinimumText(_loc1_);
  395.          var _loc2_:Rectangle = measureTextFieldBounds(_loc1_);
  396.          measuredMinWidth = measuredWidth = _loc2_.width + getStyle("paddingLeft") + getStyle("paddingRight");
  397.          measuredMinHeight = measuredHeight = _loc2_.height + getStyle("paddingTop") + getStyle("paddingBottom");
  398.       }
  399.       
  400.       public function get fontContext() : IFlexModuleFactory
  401.       {
  402.          return moduleFactory;
  403.       }
  404.       
  405.       private function textField_textModifiedHandler(param1:Event) : void
  406.       {
  407.          textFieldChanged(false);
  408.       }
  409.       
  410.       [Bindable("dataChange")]
  411.       public function get listData() : BaseListData
  412.       {
  413.          return _listData;
  414.       }
  415.       
  416.       mx_internal function set styleSheet(param1:StyleSheet) : void
  417.       {
  418.          textField.styleSheet = param1;
  419.       }
  420.       
  421.       public function set htmlText(param1:String) : void
  422.       {
  423.          textSet = true;
  424.          if(!param1)
  425.          {
  426.             param1 = "";
  427.          }
  428.          if(isHTML && param1 == explicitHTMLText)
  429.          {
  430.             return;
  431.          }
  432.          _htmlText = param1;
  433.          htmlTextChanged = true;
  434.          _text = null;
  435.          explicitHTMLText = param1;
  436.          invalidateProperties();
  437.          invalidateSize();
  438.          invalidateDisplayList();
  439.          dispatchEvent(new Event("htmlTextChanged"));
  440.       }
  441.       
  442.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  443.       {
  444.          var _loc9_:* = false;
  445.          super.updateDisplayList(param1,param2);
  446.          var _loc3_:Number = getStyle("paddingLeft");
  447.          var _loc4_:Number = getStyle("paddingTop");
  448.          var _loc5_:Number = getStyle("paddingRight");
  449.          var _loc6_:Number = getStyle("paddingBottom");
  450.          textField.setActualSize(param1 - _loc3_ - _loc5_,param2 - _loc4_ - _loc6_);
  451.          textField.x = _loc3_;
  452.          textField.y = _loc4_;
  453.          var _loc7_:String = !!isHTML ? explicitHTMLText : text;
  454.          var _loc8_:Rectangle = measureTextFieldBounds(_loc7_);
  455.          if(truncateToFit)
  456.          {
  457.             if(isHTML)
  458.             {
  459.                _loc9_ = _loc8_.width > textField.width;
  460.             }
  461.             else
  462.             {
  463.                textField.text = _text;
  464.                _loc9_ = Boolean(textField.truncateToFit());
  465.             }
  466.             if(!toolTipSet)
  467.             {
  468.                super.toolTip = !!_loc9_ ? text : null;
  469.             }
  470.          }
  471.       }
  472.       
  473.       [Bindable("htmlTextChanged")]
  474.       public function get htmlText() : String
  475.       {
  476.          return _htmlText;
  477.       }
  478.       
  479.       public function getLineMetrics(param1:int) : TextLineMetrics
  480.       {
  481.          return !!textField ? textField.getLineMetrics(param1) : null;
  482.       }
  483.       
  484.       override public function set tabIndex(param1:int) : void
  485.       {
  486.          _tabIndex = param1;
  487.          invalidateProperties();
  488.       }
  489.    }
  490. }
  491.